package sv.com.seguros.dao.asg;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang.StringUtils;

import sv.com.seguros.dao.BaseDaoImpl;
import sv.com.seguros.exception.WebException;
import sv.com.seguros.web.controller.asg.AsgSeguroForm;
import sv.com.seguros.web.util.WebUtilidades;

public class AsgVentaDaoImpl extends BaseDaoImpl implements AsgVentaDao {

	@SuppressWarnings("unchecked")
	public List<Object[]> findAllBy(AsgSeguroForm asgSeguroForm) throws WebException{
		try {
			String hqlQuery = WebUtilidades.getQueryByName("asgVenta.findAllBy");
			String where = "";
			boolean addAnd = false;
			List<Object> parameters = new ArrayList<Object>();
			if(StringUtils.isNotBlank(asgSeguroForm.getAsgClienteNombreCompleto())){
				where += 
					" upper(" +
						"concat(" +
						"	coalesce(asgVenta.asgVentaPrimerNombre, ''), ' '," +
						"	coalesce(asgVenta.asgVentaSegundoNombre, ''), ' '," +
						"	coalesce(asgVenta.asgVentaTercerNombre, ''), ' '," +
						"	coalesce(asgVenta.asgVentaPrimerApellido, ''), ' '," +
						"	coalesce(asgVenta.asgVentaSegundoApellido, ''), ' '," +
						"	coalesce(asgVenta.asgVentaApellidoCasada, ''))) like upper(?) ";
				parameters.add("%" + StringUtils.replace(asgSeguroForm.getAsgClienteNombreCompleto(), " ", "%") + "%");
				addAnd = true;
			}
			if((StringUtils.isNotBlank(asgSeguroForm.getAsgFechaInicio1()) && 
					StringUtils.isNotBlank(asgSeguroForm.getAsgFechaInicio2()))){
				where += (addAnd ? " and " : "") + " asgVenta.asgVentaFechaCreacion >= ? and  asgVenta.asgVentaFechaCreacion <= ? ";
				parameters.add(asgSeguroForm.getAsgFechaInicio1());
				parameters.add(asgSeguroForm.getAsgFechaInicio2());
				addAnd = true;
			}
			
			if("0".equals(asgSeguroForm.getAsgFinalizado())){
				where += (addAnd ? " and " : "") + " (asgVenta.asgVentaFinalizado is null or asgVenta.asgVentaFinalizado = '0') ";
			}else if("1".equals(asgSeguroForm.getAsgFinalizado())){
				where += (addAnd ? " and " : "") + " asgVenta.asgVentaFinalizado = '1' ";
			}
			hqlQuery = StringUtils.replace(hqlQuery, "{WHERE}", StringUtils.isNotBlank(where) ? (" where " + where) : "");
			return (List<Object[]>) findByHQLQuery(hqlQuery, parameters.toArray());
		} catch (Exception e) {
			throw new WebException("Problemas tratar de obtener el detalle de pendientes");
		}
	}
		
}
